from collections import deque
import sys, os, io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
def topological_sort():
g = []
q = deque()
cnt = [0] * (n + 1)
for i in range(1, n + 1):
for j in G[i]:
cnt[j] += 1
for i in range(1, n + 1):
if not cnt[i]:
q.append(i)
while q:
i = q.popleft()
g.append(i)
for j in G[i]:
cnt[j] -= 1
if not cnt[j]:
q.append(j)
return g
n, m, k = map(int, input().split())
x = [1]
for _ in range(k - 1):
x.append(27 * x[-1])
d = dict()
for v in range(1, n + 1):
s = list(input().rstrip())
u = 0
for i, j in zip(x, s):
u += i * max(0, j - 96)
d[u] = v
pow2 = [1]
for _ in range(k):
pow2.append(2 * pow2[-1])
l = pow2[k]
G = [[] for _ in range(n + 1)]
for _ in range(m):
s, mt = input().rstrip().split()
v = set()
s, mt = list(s), int(mt)
for i in range(l):
u = 0
for j in range(k):
if i & pow2[j]:
u += x[j] * (s[j] - 96)
if u in d:
v.add(d[u])
if not mt in v:
ans = "NO"
print(ans)
exit()
for i in v:
if i ^ mt:
G[mt].append(i)
p = topological_sort()
ans = "YES" if not len(p) ^ n else "NO"
print(ans)
if ans == "YES":
sys.stdout.write(" ".join(map(str, p)))
1651D - Nearest Excluded Points | 599A - Patrick and Shopping |
237A - Free Cash | 1615B - And It's Non-Zero |
1619E - MEX and Increments | 34B - Sale |
1436A - Reorder | 1363C - Game On Leaves |
1373C - Pluses and Minuses | 1173B - Nauuo and Chess |
318B - Strings of Power | 1625A - Ancient Civilization |
864A - Fair Game | 1663B - Mike's Sequence |
448A - Rewards | 1622A - Construct a Rectangle |
1620A - Equal or Not Equal | 1517A - Sum of 2050 |
620A - Professor GukiZ's Robot | 1342A - Road To Zero |
1520A - Do Not Be Distracted | 352A - Jeff and Digits |
1327A - Sum of Odd Integers | 1276A - As Simple as One and Two |
812C - Sagheer and Nubian Market | 272A - Dima and Friends |
1352C - K-th Not Divisible by n | 545C - Woodcutters |
1528B - Kavi on Pairing Duty | 339B - Xenia and Ringroad |